package com.itbaizhan;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/*全局容器的使用*/
/*全局容器
servletContext.setAttribute("key",ObjectValue)
向全局容器中存放数据。
servletContext.getAttribute("key")
从全局容器中获取数据。
servletContext.removeAttribute("key")
根据key删除全局容器中的value。*/

//servletContext的全局性  在其它的servlet对象也可以获取容器
//在GetBaseInfoServlet.java中体现
//注意：要先启动GlobalContainerServlet.java，因为init()方法在这里，
//数据添加了才可以被其它的servlet访问
public class GlobalContainerServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
//获取ServletContext对象的数据
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext servletContext = this.getServletContext();
        //获取数据，注意数据类型，要强转
        String value = (String)servletContext.getAttribute("key1");
        String value2 = (String)servletContext.getAttribute("key2");
        PrintWriter pw = resp.getWriter();
        pw.println(value);
        pw.println(value2);
        pw.flush();
        pw.close();

    }

    /* servlet的生命周期 当客户端浏览器第一次请求Servlet时，容器实例化servlet对象后，会调用一次init()方法
    * ，生成新的线程执行servlet对象,执行结束后，容器不会销毁这个servlet对象，会放入
    * 缓存区，当客户端再次使用这个servlet对象，容器会在缓区调出这对象，并在
    * 新的线程中执行Service方法，当容器在销毁Servlet之前对调用一次destroy方法。*/

    //这里调用init()方法，向ServletContext对象 添加数据
    @Override
    public void init() throws ServletException {
        //获取ServletContext对象
        ServletContext servletContext = this.getServletContext();
        //setAttribute()向容器存入数据
        servletContext.setAttribute("key1","bjsxt");
        servletContext.setAttribute("key2","itbz");


    }
}
